/**
 * 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数，
 * 使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

 * @param {*} nums 
 * @param {*} target 
 * @returns 
 */
function threeSumClosest(nums, target) {
    nums.sort((a, b) => a - b);
    let ans = nums[0] + nums[1] + nums[2];
    for (let i = 0; i < nums.length; i++) {
        let start = i + 1, end = nums.length - 1;
        while (start < end) {
            let sum = nums[start] + nums[end] + nums[i];
            if (Math.abs(target - sum) < Math.abs(target - ans))
                ans = sum;
            if (sum > target)
                end--;
            else if (sum < target)
                start++;
            else
                return ans;
        }
    }
    return ans;
}
